#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "videoprocessor.h"
#include "LineFinder.h"


void canny(cv::Mat& img, cv::Mat& out) {

    // Converter para cinza
    //cv::cvtColor(img,out,CV_BGR2GRAY);


    cv::Mat original;
    img.copyTo(original);

    //Inverter imagem
    cv::threshold(img,img,128,255,cv::THRESH_BINARY_INV);

    //Converter para HSV
    //cv::cvtColor(img, out, CV_BGR2HSV);

    // Deteccao de borda canny
    cv::Canny(img,out,80,200);

    // cria objeto linefinder
    LineFinder ld;

    // configura os parametros de hough
    ld.setLineLengthAndGap(100,20);
    ld.setMinVote(80);

    // identifica e exibe as linhas
    std::vector<cv::Vec4i> li= ld.findLines(out);
    ld.drawDetectedLines(original);

    cv::namedWindow("Linha detectadas por HoughP");
    cv::imshow("Linha detectadas por HoughP",original);


}


int main()
{


    VideoProcessor processor;

    // Abrir o video
    processor.setInput("clip1.avi");

    // Declare a window to display the video
    processor.displayInput("Video Original");
    processor.displayOutput("Video Processado");

    // Play video
    processor.setDelay(1000./processor.getFrameRate());

    //Funcao callback processamento
    processor.setFrameProcessor(canny);

    //Executa o programa
    processor.run();

    //Aguarda interacao teclado
    cv::waitKey();
}
